package com.yry.timertask;


import com.yry.timertask.chapter21.MyTimerTask;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;

public class MyTimer {

	 public static void main(String[] args){
	 	//1、创建一个timer实例
		 Timer timer = new Timer();
//		 2、创建一个MyTimerTask实例
		 MyTimerTask myTimerTask = new MyTimerTask("No.1");
//		 3、通过timer定时定频率调用myTimerTask的业务逻辑。
//		 即第一次执行时在当前时间的2S之后，之后每隔1S执行一次。
		 timer.schedule(myTimerTask,2000L,1000L);


		 /*获取当前时间，并设置成距离当前时间3S之后的时间
		  * 如：当前时间2016-11-10 23:59:57
		  * 则设置后的时间则为2016-11-11 00：00:00
		  *
		  * */
		 Calendar calendar = Calendar.getInstance();
		 SimpleDateFormat sf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		 System.out.println("Current exec time is:"+sf.format(calendar.getTime()));
		 calendar.add(Calendar.SECOND,3);

//		--------schedule的用法 ------------------

		 /*1、在时间等于或超过time的时候执行且仅执行一次
		 *  如在2016-11-11 00：00:00执行一次task:打印任务的名称。
		 * */

//		 myTimerTask.setName("schedule1");
//		 timer.schedule(myTimerTask,calendar.getTime());

		 /*2、在时间等于或超过time的时候执行task
		 *  之后每隔period毫秒重复执行一次task
		 *  如在2016-11-11 00：00:00执行一次task:打印任务的名称。
		 *  之后每隔2S执行一次task
		 * */
//		 myTimerTask.setName("schedule2");
//		 timer.schedule(myTimerTask,calendar.getTime(),2000L);

		 /*3、等待delay毫秒后，执行且仅执行一次task
		 * 如在2016-11-11 00：00:00
		 * 则在2016-11-11 00：00:01执行一次task:打印任务的名字
		 *
		 * */
//		 myTimerTask.setName("schedule3");
//		 timer.schedule(myTimerTask,1000L);

		 /*4、等待delay毫秒后，首次task
		  * 之后每隔period毫秒重复执行一次task
		  * 如在2016-11-11 00：00:00
		  * 则在2016-11-11 00：00:01执行一次task:打印任务的名字
		  * 之后每隔2S执行一次task
		  * */
//		 myTimerTask.setName("schedule4");
//		 timer.schedule(myTimerTask,1000L,2000L);

		 //----------------  scheduleAtFixedRate的用法  -------------
		 /*1、在时间等于或超过time的时候执行task
		  *  之后每隔period毫秒重复执行一次task
		  *  如在2016-11-11 00：00:00执行一次task:打印任务的名称。
		  *  之后每隔2S执行一次task
		  * */
//		 myTimerTask.setName("scheduleAtFixedRate1");
//		 timer.scheduleAtFixedRate(myTimerTask,calendar.getTime(),2000L);

		 /*2、等待delay毫秒后，首次task
		  * 之后每隔period毫秒重复执行一次task
		  * 如在2016-11-11 00：00:00
		  * 则在2016-11-11 00：00:03执行一次task:打印任务的名字
		  * 之后每隔2S执行一次task
		  * */
		 myTimerTask.setName("scheduleAtFixedRate2");
		 timer.scheduleAtFixedRate(myTimerTask,3000L,2000L);

	 }
}
